机器学习平台的模型发布指南
导读:近两年,各式各样的机器学习平台如雨后春笋一样出现,
极大地降低了从业者的门槛。 大家的关注点往往在平台如何能够高效地进行各种花样地数据预处理 ,如何简单易用地训练出各种模型上。但是在产出模型之后呢? 我们应该通过怎样的方式才能让模型产生价值呢?
作为机器学习平台的构建者,在得到应用于不同场景、
实时预测服务:兼容不同模型,包装成用于预测的功能,
进一步发布面向用户的高时效性的预测服务, 亦或是高性能的批处理任务。 优化平台自身:在得到相对比较成熟的模型后,反哺平台的流程,
以模型算法增强平台的功能。这样,才能产生平台 -> 模型 -> better平台 -> better模型 -> … 的良性闭环。
首先,为了把各种模型发布成应用服务,
模型作为一种图结构,无论是数据在模型中的计算,
GraphDef
模型网络中所有的节点都代表一种数学上的计算,它们都接收上一层节点的输出,同时输出到下一层节点作为输入。 正是通过繁琐的计算,把所有节点都联系在一起, 组成了Graph对象。 Weight
在如今如此多开源Graph结构的情况下,weight其实是大部分模型的真正产出, 是模型训练阶段大部分时间优化的目标。 这一方面是因为成熟Graph结构的易得性, 另一方面也反应了Graph优化的高门槛。 即使可能成为未来趋势的AutoML, 在如今因为极高的算力要求下,也使大多数公司望而却步。
模型的训练就是在Graph的骨架下,
平台为了响应用户的预测请求,以对象识别为例,
平台往往会提供交互式的云端机器学习开发环境,
供用户训练自己的模型, 所以平台API需要兼容输入输出差异巨大的模型 在通过GraphDef重构模型,Weight复现参数后,
作为一个图结构, 需要明确知道输入输出node的tensor名称, 以实现模型的inference,增加了标准化的难度 模型的训练是建立在大量的数据集基础上,
实际的输入不会是图片和标注数据这样的原始数据, 而是tfrecord、LMDB等经过压缩的数据集, 就造成了模型的输入和预测服务输入的偏差。
为了解决问题,
定义模型做inference时,作为输入的数据结构
定义数据预处理方法,
将输入转变成能被模型真正接受的tensor数据
因此,通过引入inference时特有的数据预处理,
平台模型千千万,为了让所有模型都可以一键发布,
满足不同模型在做inference时的运行依赖
包装inference成restful api,并发布成平台服务,暴露给用户
得力于机器学习框架对运行时环境要求的一致性,
同时,出于模型发布标注化的要求,
进一步,
AI平台作为模型的生成工厂,
预标注
模型的训练需求海量带label的数据,对原始采集的数据进行标注的工作,基本都是人工完成的。 这是一项极其耗时的任务,并且对准确的要求很高。 数据的质量决定了最终产生的模型的上限(shit in, shit out)。因此,在我们得到对应场景的模型后, 便可以发布成预标注的任务,先于人工进行标注, 大大优化平台的标注流程,从而得到更好的模型, 再更好的优化平台,再。。。 场景采集
成熟的模型需要在不同的需求场景下都有优秀的表现,以自动驾驶为例,就需要应对不同的天气、路况、突发情况等。 与预标注类似,平台可以利用模型计算源数据各场景数据的稀缺性, 来指导平台数据的采集工作,以加强模型较薄弱性能的场景。 模型训练
作为“调参工程师”的主要工作,训练模型的工作同样机械的复杂和繁琐。因此, 平台如果有能力训练出能应用于模型训练过程中的各种优化、 压缩算法,比如剪枝、hyperparameter search、精度计算优化等,能进一步优化了平台的流程。
这样,平台就通过发布自身产出的模型,
相关文章: